package edu.gmu.atelier;

import java.util.ArrayList;
import java.util.List;

/**
 * Set of vectors with vector combination and scalar multiplication operations.
 * @author James H. Pope
 */
public interface IMatrix
{
    public int getRows();
    public int getCols();
    public Element getValue( int row, int col );
    
    public VectorFactory getFactory();
    public IMatrix copy();
    public IMatrix identity();
    
    //Testing only
    public double[][] getData();
    
    public List<Vector> getVectors();
    public Vector mult(Vector x);
    public IMatrix mult( IMatrix b );
    public Vector getVector(int j);
    public IMatrix transpose();
    
    // Mutator methods
    public void swapRow( int fromRow, int toRow );
    public void mulTo( int row, Element mult );
    
    public Matrix sub(IMatrix m);
    public Matrix mult(Element s);
    public Matrix diag();
    public Matrix sqrt();
    public Matrix inverse();
    public boolean isDiagonal();
    public boolean isIdentity();
    public boolean isIdentity(Epsilon e);
    
    public boolean similar( Object obj, Epsilon e );
}
